package com.baizhi.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.util.List;

/**
 * Mybatis 为什么要写Mapper文件？
 * 1. Sql
 * 2. 映射规则 字段和属性如何一一对应
 *
 * MybatisPlus 没有Mapper 需要一些东西取代Mapper文件的作用
 * 1. Sql MybatisPlus在运行的时候会自动生成【不需要写Sql】
 * 2. 需要通过MybatisPlus的注解在实体类中定义属性和字段映射关系
 *
 * 表名注解 @TableName 和 非主键属性 @TableField 在以下情况中可以不写
 * - 实体类命名 严格按照驼峰命名法定义了
 * 表名          类名
 * bz_admin ----> BzAdmin
 * 字段名    属性名
 * username  ----> username
 * admin_id  ----> adminId
 *
 * - 实体类类名 属性名 和 表名字段名 字母完全一致
 */

@Data
@EqualsAndHashCode(callSuper = false)
public class BzMenu implements Serializable {
    /**
     * 三种属性
     * 1 主键属性  @TableId(value = "id",type = IdType.AUTO)
     * value 主键的字段名 type 自增类型 【该注解必须写】
     * <p>
     * 2 非主键属性  @TableField("username") 参数字段名
     * <p>
     * 3 在数据库中不存在的属性     @TableField(exist = false) 当前属性在数据库中不存在
     * 【该注解必须写】
     */
    private static final long serialVersionUID = 1L;

    @TableId(value = "menu_id", type = IdType.AUTO)
    private Long menuId;

    /**
     * 父菜单ID，一级菜单为0
     */
    private Long parentId;

    /**
     * 菜单名称
     */
    private String name;

    /**
     * 菜单URL
     */
    private String url;

    /**
     * 授权(多个用逗号分隔，如：user:list,user:create)
     */
    private String perms;

    /**
     * 类型   0：目录   1：菜单   2：按钮
     */
    private Integer type;

    /**
     * 菜单图标
     */
    private String icon;

    /**
     * 排序
     */
    private Integer orderNum;

    @TableField(exist = false)
    private List<BzMenu> menuList;
}
